package main

import "fmt"

func main() {
	a()
	b()
	partAno1()
	closure()
}

//全局匿名函数 匿名函数创建方式1
var a = func() {
	fmt.Println("hello world...")
}

//全局匿名函数 匿名函数创建方式2
var (
	b = func() {
		fmt.Println("hello 2")
	}
)

//局部匿名函数
func partAno1() {
	// 方式1
	a := func(s string) {
		fmt.Println(s)
	}
	a("输出一下...")

	//方式2
	s1 := "输出一下2"
	func(s string) {
		fmt.Println(s)
	}(s1)
}

//	闭包 在匿名函数用使用了外界的变量，那么这个匿名函数就是一个闭包
func closure() {
	num := 10
	a := func() {
		num = 6
		fmt.Println(num) //在闭包中调用到了main函数中的num,所以这个匿名函数就是一个闭包
	}
	fmt.Println("执行闭包前...", num)
	a()
	fmt.Println("执行闭包后....", num)
}
